ttXlaUpdateDesc_t
ttXlaUpdateDesc_t構造体は、データ・ストア内の単一行(またはタプル)への更新処理について記述します。ttXlaNextUpdateまたはttXlaNextUpdateWait関数によって返される各更新レコードは、固定長ヘッダーttXlaUpdateDesc_tで始まり、その後に0(ゼロ)から2行のデータ・ストアからの行が続きます。行データはttXlaUpdateDesc_tヘッダーにレポートされたレコード・タイプによって異なります。
- COMMITONLYのレコードに行は含まれません。
- INSERTTUP、DELETETUPまたはSETREPLレコードには1行の行が含まれます。
- UPDATETUPレコードには2行の行が含まれ、更新前および更新後の行がレポートされます。
- CREATAB、DROPTAB、CREAIND、DROPIND、CREATVIEW、DROPVIEW、CREATSEQ、DROPSEQ、ADDCOLS、DRPCOLS、SETTBLIおよびSETCOLIレコードには、特別な書式行が含まれています(「特別な更新データの書式」を参照)。
注意: | 永続モードでは、SETREPL、SETTBLIおよびSETCOLIは返されません。 |
flagsフィールドは、レコード更新の特別なオプションのビットマップです。
connIDフィールドは、更新を開始したODBC接続ハンドルを識別します。この値を使用すると、更新が同一の接続から行われたかどうかを確認できます。
個別のコミットXLAレコードは、ttApplicationContextをコールした後にXLAレコードを生成する処理が行われない場合に生成されます。ttApplicationContextプロシージャについては、「アプリケーションのコンテキストの受渡し」を参照してください。
注意:
XLAは、次の通知を受信できません。
- 非マテリアライズド・ビューのCREATE VIEWまたはDROP VIEW
- 一時表のCREATE GLOBAL TEMPORARY TABLEまたはDROP TABLE
ALTER TABLE処理で生成可能なXLAレコードは、次のタイプのみです。
- ADDCOLSまたはDRPCOLS(列を追加または削除する場合)
- CREAINDまたはDROPIND(列の一意の属性を変更する場合)
次に、ttXlaUpdateDesc_tによって定義される更新ヘッダーのフィールドを示します。
フィールド | 型 | 説明 |
header | | 標準データ・ヘッダー。 |
type | SQLUSMALLINT | レコード・タイプ。 |
flags | SQLUSMALLINT | レコード更新での特別なオプション。
- TT_UPDFIRST: 更新レコードがトランザクションの最初のレコードであることを示します。
- TT_UPDCOMMIT: 更新レコードがトランザクションの最後のレコードであることを示します(暗黙的コミット)。
- TT_UPDCOLS: 最後に返された行に続く、行内の更新された列を示すリストの存在を示します。このリストは、SQLUSMALLINT値の配列で構成され、リストの最初は更新された列の数で、更新された列の列番号がそれに続きます。たとえば、1番目および3番目の列が更新された場合、この配列は、使用されたUPDATE文に応じて(2, 1, 3)、(2, 3, 1)などになります。この配列は、すべてのUPDATETUPレコードに含まれます。
- TT_UPDREPL: この更新が別のデータ・ストアからのXLA以外のTimesTenでレプリケートされた更新の結果であったことを示します。
|
flags (続き) | SQLUSMALLINT |
- TT_UPDDEFAULT: 更新レコード(CREATABまたはADDCOLSのいずれか)にデフォルトの列値が含まれていることを示します。デフォルトの列は、設定されている場合、SQLUSMALLINT値の配列として示され、すべてのデフォルト値が連結された文字列がその後に続きます。配列内のSQLUSMALLINT値の数は、CREATABまたはADDCOLSレコード内の列の数と同じです。
特定の列の値が0(ゼロ)の場合は、その列にデフォルト値がないことを示します。0(ゼロ)以外のすべての値のデフォルト値は文字列内で連結され、デフォルト値の長さを示す配列値の順序で示されます。たとえば、デフォルト値がINTEGER型1の列、デフォルトがない列および"apple"がvarchar(10)型の列の3つの列は、(1,0,5)1,0,5)"apple"となります。
|
contextOffset | SQLUINTEGER | アプリケーション提供のコンテキスト値のオフセット。コンテキストがない場合、この値は0(ゼロ)です。0(ゼロ)以外の値は、XLAレコードの先頭に関連するコンテキストの位置を示します。 |
connID | SQLUBIGINT | トランザクションを所有している接続ID。 |
sysTableID | SQLUBIGINT | 影響を受ける表のシステム提供識別子。 |
userTableID | SQLUBIGINT | 影響を受ける表のアプリケーション定義の表ID。 |
tranID | SQLUBIGINT | 読取り専用のシステム提供トランザクション識別子。 |
LSN | | この処理のログ順序番号。診断に使用されます。 |
tuple1 | SQLUINTEGER | 第1行(タプル)の長さまたは0(ゼロ)。 |
tuple2 | SQLUINTEGER | 第2行(タプル)の長さまたは0(ゼロ)。 |
特別な更新データの書式
ttXlaTblDesc_tヘッダーの後には、更新レコードに含まれているデータが続きます。この項では、特定のSQL処理に関連した特別な更新レコードのデータ書式について説明します。
CREATE TABLE
CREATE TABLEの場合、特別な行の値は、新しい表について記述するttXlaTblDesc_tレコードおよびその後に続く、各列について記述するttXlaColDesc_tレコードで構成されています。
ALTER TABLE
ALTER TABLEの場合、特別な行の値は、ttXlaDropColumnTup_t またはttXlaAddColumnTup_t 値およびその後に続く、列について記述するttXlaColDesc_t レコードで構成されます。
ttXlaDropTableTup_t
DROP TABLE処理の場合、行の値は次のようになります。
フィールド | 型 | 説明 |
tblName | char (31) | 削除された表の名前。 |
tblOwner | char (31) | 削除された表の所有者。 |
ttXlaTruncateTableTup_t
TRUNCATE TABLE処理の場合、行の値は次のようになります。
フィールド | 型 | 説明 |
tblName | char (31) | 切り捨てられた表の名前。 |
tblOwner | char (31) | 切り捨てられた表の所有者。 |
ttXlaCreateIndexTup_t
CREATE INDEX処理の場合、行の値は次のようになります。
フィールド | 型 | 説明 |
tblName | char (31) | 索引が定義される表の名前。 |
tblOwner | char (31) | 索引が定義される表の所有者。 |
ixName | char (31) | 新しい索引の名前。 |
flag | char (1) | 索引フラグ。 P =プライマリ F =外部 R =標準 |
nixcols | SQLUINTEGER | 索引付けされた列の数。 |
ixColsSys | SQLUINTEGER(16) | システム番号を使用して索引付けされた列番号。 |
ixColsUser | SQLUINTEGER(16) | ユーザー定義列IDを使用して索引付けされた列番号。 |
ixType | char | 'T' =Tツリー 'H' =ハッシュ |
ixUnique | char | 'U' =一意索引 'N' =非一意索引 |
pages | SQLUINTEGER | ハッシュ索引のページ数。 |
ttXlaDropindexTup_t
DROP INDEX処理の場合、行の値は次のようになります。
フィールド | 型 | 説明 |
tblName | char (31) | 索引が削除された表の名前。 |
tblOwner | char (31) | 索引が削除された表の所有者。 |
ixName | char (31) | 削除された索引の名前。 |
ttXlaAddColumnTup_t
列の追加の場合、行の値は次のようになります。
フィールド | 型 | 説明 |
ncols | SQLUINTEGER | 追加列の数。 |
この特別な行の後に、新しい列について記述するttXlaColDesc_tレコードが続きます。
ttXlaDropColumnTup_t
列の削除の場合、行の値は次のようになります。
フィールド | 型 | 説明 |
ncols | SQLUINTEGER | 削除された列の数。 |
この特別な行の後に、削除された列について記述するttXlaColDesc_tレコードの配列が続きます。
ttXlaCreateSeqTup_t
CREATE SEQUENCE処理の場合、行の値は次のようになります。
フィールド | 型 | 説明 |
sqName | char(31) | 順序の名前。 |
sqOwner | char(31) | 順序の所有者。 |
cycle | char | 順序番号ジェネレータが、最大値または最小値に達した後も番号の生成を続行するかどうかを指定します。 指定可能な値は、次のとおりです。 1 =サイクルする。 0 =サイクルしない。 |
minval | SQLBIGINT | 順序の最小値。 |
maxval | SQLBIGINT | 順序の最大値。 |
incr | SQLBIGINT | 順序番号間の増分。正の値は昇順、負の値は降順を示します。 降順では、値の範囲は最大値から最小値までになります。昇順では、その逆になります。 |
ttXlaDropSeqTup_t
DROP SEQUENCE処理の場合、行の値は次のようになります。
フィールド | 型 | 説明 |
sqName | char(31) | 順序の名前。 |
sqOwner | char(31) | 順序の所有者。 |
ttXlaViewDesc_t
CREATE MATERIALIZED VIEW処理の場合、行の値は次のようになります。
フィールド | 型 | 説明 |
vwName | char(31) | マテリアライズド・ビューの名前。 |
vwOwner | char(31) | マテリアライズド・ビューの所有者。 |
sysTableID | SQLUBIGINT | SYS.TABLESに格納されたシステム表ID。 |
ttXlaDropViewTup_t
マテリアライズド・ビューに対するDROP VIEW処理の場合、行の値は次のようになります。
フィールド | 型 | 説明 |
vwName | char(31) | マテリアライズド・ビューの名前。 |
vwOwner | char(31) | マテリアライズド・ビューの所有者。 |
ttXlaSetTableTup_t
表ID設定処理の場合、更新レコードの主要部分で以前に割り当てられたアプリケーション表識別子を使用し、アプリケーション表識別子の新しい値を特別な行に指定するように記述されます。
フィールド | 型 | 説明 |
newID | SQLUBIGINT | 新しいユーザー定義の表ID。 |
ttXlaSetColumnTup_t
列ID設定処理の場合、次の特別な行が記述されます。
フィールド | 型 | 説明 |
oldUserColID | SQLUINTEGER | 以前のユーザー定義の列ID値。 |
newUserColID | SQLUINTEGER | 新しいユーザー定義の列ID値。 |
sysColID | SQLUINTEGER | システム列ID。 |
ttXlaSetStatusTup_t
表のレプリケーション・ステータスの変更の場合、次の特別な行が記述されます。
フィールド | 型 | 説明 |
oldStatus | SQLUINTEGER | 以前のレプリケーション・ステータス。 |
newStatus | SQLUINTEGER | 新しいレプリケーション・ステータス。 |
ttXlaUpdateDesc_tヘッダーの後に続く行データのアドレスの検出
更新レコードを取得する手順およびttXlaUpdateDesc_tヘッダーの内容を確認する手順の詳細は、「トランザクション・ログからの更新レコードの取得」および「レコード・ヘッダーの確認および行アドレスの検出」を参照してください。次に、これらの手順の概要を示します。
更新ヘッダーの直後に行データが続きます。行データは、ttXlaGetColumnInfoによって返されるttXlaColDesc_t構造体に指定されているオフセットとともに内部形式で格納されます。
更新ヘッダーのサイズにそのアドレスを追加して、行データのアドレスを検出することができます。
次に例を示します。
char *Row = (char*)&ttXlaUpdateDesc_t +
sizeof(ttXlaUpdateDesc_t);
UPDATETUPレコードの場合、ttXlaUpdateDesc_tヘッダーの後に2行のデータが続きます。1つ目の行には更新前のデータ、2つ目の行には更新後のデータが含まれています。
新しい行は古い行の直後に続くため、古い行の長さ(tuple1)にそのアドレスを追加して、新しい行のアドレスを計算することができます。
次に例を示します。
char *oldRow = (char*)&ttXlaUpdateDesc_t +
sizeof(ttXlaUpdateDesc_t);
char *newRow = oldRow + ttXlaUpdateDesc_t.tuple1;
返された行内の列データにアクセスする方法の詳細については、「ttXlaColDesc_t」を参照してください。